<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 验证 {} 和 new Object效果相同
        const obj1 = {
            a: 10,
            b: 20,
            sum() {
                return this.a + this.b;
            }
        };

        const obj2 = new Object({
            a: 10,
            b: 20,
            sum() {
                return this.a + this.b;
            }
        });

        const obj2 = new Object(obj1);
        // 这样操作后，obj1 和 obj2 的地址完全相同，所以obj1 === obj2
        // 若不这样操作的话，则会有不同的地址，虽然内容完全相同

        // 对比new Object 和 Object.create 
        // 虽然obj3和obj4都是空，但是obj3 里完全空：No properties；obj4 里有隐式原型指向Object
        const obj3 = Object.create(null);
        const obj4 = new Object();

        // 所以 Object.create()方法是创建一个空对象，然后传入的对象的原型挂载在这个对象身上
        const obj5 = Object.create({
            a: 10,
            b: 20,
            sum() {
                return this.a + this.b;
            }
        });

        const obj6 = Object.create(obj1);
        // 显然，obj6 !== obj1
        // 但是可以得出
        obj6.__proto__ === obj1;
    </script>
</body>

</html>